<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	// 01-工厂模式
	// 解决了代码冗余的问题，但所有指向对象都指向了obj
	function Person(name,age){
		var obj = new Object();
		obj.name = name;
		obj.age = age;
		return obj;
	}
	var p1 = Person('张三',20);
	console.log(p1);
	var p2 = Person('李四',21);
	console.log(p2);
	
</script>
<script type="text/javascript">
	// 02-构造函数模式
	// 指向对象指向了Person,解决了对象识别的问题
	function Person(name,age){
		this.name = name;
		this.age = age;
	}
	var p = new Person('王五',22);
	console.log(p);
</script>
<script type="text/javascript">
	// 03-原型模式
	// 'p '指向的是Person方法的原型
	function Person(){
		
	}
	Person.prototype = {
		name: '张三',
		age: '15',
		say: function(){
			console.log(this.name);
		}
	}
	var p = new Person();
	console.log(p);
</script>
<script type="text/javascript">
	// 04-寄生式创建对象
	function Person(){
		this.class = '人类'
	}
	function man(name,age){
		var obj = new Person();
		// 开始寄生在obj对象上，通过obj来给man添加属性
		obj.name = name;
		obj.age = age;
		return obj;
	}
	var p =man('张三丰',99);
	console.log(p)
	
	
</script>
<script type="text/javascript">
	// 05-构造函数和原型组合的方式来创建对象
	function Person(name,age){
		this.name = name;
		this.age = age;
	}
	// *注意，构造函数中会有原型，而在原型中也会存在构造函数，彼此没有尽头
	Person.prototype.say = function() {
		console.log(this.name);
	}
	var p = new Person('令狐冲',21)
	console.log(p)
</script>
<script type="text/javascript">
	// 06-稳妥创建对象的方式
	function Person() {
		var name = '赵丽颖';
		var age = '18';
		var address = '河北廊坊';
		var obj = new Object();
		obj.getName = function(){
			return name;
			
		},
		obj.setName = function(){
			name = newName;
		}
		return obj;
	}
	var p = Person();
	console.log(p)
	// 想打印名字就在控制台调用getName方法，同理改名字就用setName方法 
</script>
<script type="text/javascript">
	// 07-字面量方式创建对象
	var obj = {
		name: '张三丰';
		age: 100
	}
	// 07-1 使用Object来创建
	var obj1 = new Object();
	obj1.name = '张三丰';
	obj1.age = 120;
	
</script>

